import org.junit.Test;

import java.util.Arrays;

/**
 * 数组 Array
 * 数组相当于
 */
public class 数组 {
    //1.数组的定义
    @Test
    public void testArray() {
        //注意：数组定义长度固定，不能改变
        int[] arr1 = new int[4];//java推荐写法  动态初始化
        int arr2[] = new int[4];//c推荐写法与Java兼容  动态初始化
        int[] arr3 = {1, 2, 3};//静态初始化数值  元素可以直接使用
        int[] arr4 = new int[]{1, 2, 3};//动态初始化
        //数组：内部存数据叫做元素
        //从arr3取出2的元素     数组名  下标
        System.out.println(arr3[1]);
        //从arr3的长度
        System.out.println(arr3.length);
        //从arr4获取到第四个元素值        数组下标越界异常
        System.out.println(arr4[4]);//报错 ArrayIndexOut0fBoundsException
    }

    /**
     * 数组的迭代(遍历：输出数组所有元素值)三种
     * 1、普遍迭代方式：for
     * 2、增强for方式：推荐，jdk1.5之后
     * 3、工具类：Arrays
     */
    @Test
    public void testIterate() {
        int[] arr = {1, 2, 3, 4};//静态初始化数组     数组名[下标]
//        for(int i=0;i<arr.length;i++){//拿数组下标
//            System.out.println(arr[i]);
//       }
        //增强for jdk1.5
//      for(int j:arr){//增强for语法:(遍历数据类型 引用：数组名)
//          System.out.println(j);
//
        //       }
        //工具类：Arrays.toSring()直接打印数组元素值
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 数组扩容：数组长度是固定的，不可改变【可以使用扩容改变数组长度】
     */
    @Test
    public void testCopy() {
        //字符数组，数组长度固定：2个
        char[] arr = {'唐', '山'};//想法：长度增加为4
        //扩容：增加4个
        char[] temp = Arrays.copyOf(arr, 4);
        arr = temp;
        arr[2] = '工';
        arr[3] = '业';
        System.out.println(arr);
        //需求：输出唐山工业
    }

    /**
     * 数组在输出元素中，会有些不同，【查看数据是否是数组】
     * 数据类型：基础数据类型+引用类型
     */
    @Test
    public void testArrays() {
        //字符数组
        char[] china = {'中', '国'};
        System.out.println(china);//输出：中国   字符串：字符数组
        //输出语句--JavaOOP面向对象：重载，字符自动拼接
        //数值数组
        int[] i = {1, 2};
        System.out.println(i);//输出：[  I数据类型   @  连接符   70a9f84e地址值
    }

    /**
     * 冒泡排序：双层for循环使用：外层for执行一次，执行全部
     */
    @Test
    public void bubbleSort() {
        //静态初始化数组
        int[] arr = {3, 6, 4, 1};
        //外层for
        for (int i = 0; i < arr.length-1; i++) {
                //
            for (int j=0;j< arr.length-1-i;j++){
               //交换：创建第三方数组，接受【相邻元素】  数组名【下标】
             if (arr[j]>arr[j+1]){
                 //创建第三方数组，接收   变量/数组名：temp
                 int temp=arr[j];//大的元素交给第三方变量保存
                 arr[j]=arr[j+1];//第二个元素换给第一个元素位置
                 arr[j+1]=temp;//

             }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}